package cn.stuManagement.student;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

import cn.stum.util.SysIntial;

public class Menu {
	private static Scanner sc = new Scanner(System.in);
	// private static String SysIntialID = "admin";
	// private static String SysIntialPW = "123456";
	
	
	//主方法
	public static void main(String[] args) {
		try {
			operation();
		} catch (Exception e) {
			System.out.println("发生异常"+e.getMessage());
		} finally {
			System.out.println("===程序退出===");
		}
	}
	
	
	
	
	//运行系统
	public static void operation() throws Exception {
		LogUtil.setLoglevel(1);
		// 初始化数据

		// 初始化列表及文件信息
		//学生数据库
		List<Student> listStu = new ArrayList<>();
		//好友数据库
		List<Friend> listFriend = new ArrayList<>();
		//留言库
		List<Message> listm = new ArrayList<>();
		//当前用户的其他同学数据
		List<Map<String, Object>> userListOthers = new ArrayList<>();
		//当前用户的好友信息
		List<Map<String, Object>> userListFriend = new ArrayList<>();
		//当前用户的留言板
		List<Map<String, Object>> messageBoard = new ArrayList<>();
		// 存储学生信息的文件
		File file = new File("src/student.txt");
		// 存储好友信息的文件
		File fileFriend = new File("src/friend.txt");
		//留言的文件
		File fileMessage = new File("src/message.txt");
		//每层的选项
		int choise1 = 0;
		int choise2 = 0;

		// 读入学生数据
		listStu = SysIntial.listsALL(file);
		// 完全输出学生信息
//				System.out.println("学生信息列表：");
//				for (Student student : listStu) {
//
//					System.out.println(student);
//				}
		// 读入好友关系数据
		listFriend = SysIntial.listsALL(fileFriend);
//		System.out.println("好友列表");
//		for(Friend f:listFriend) {
//			System.out.println(f);
//		}
		//读入留言信息
		listm = SysIntial.listsALL(fileMessage);
//		System.out.println("留言列表");
//		for(Message m: listm) {
//			System.out.println(m);
//		}

		// 每层标志位
		boolean flag1 = true;
		boolean flag2 = true;
		boolean flag3 = true;

		while (true) {
			// 显示主菜单
			ShowIndexPage();
			flag1 = true;

			// 输入选项，进行下一步操作
			choise1 = sc.nextInt();
			if (choise1 == 1) {
				// 如果用户名密码正确，显示教师菜单
				if (SysIntial.loginTeacher()) {
					while (true) {
						flag2 = true;
						showTeacherMenu();
						// 选择功能选项
						choise2 = sc.nextInt();
						switch (choise2) {
						case 1:
							SysIntial.add(listStu);
							System.out.println("添加成功");
							break;
						case 2:
							SysIntial.printStuList(listStu);
							break;
						case 3:
							boolean updated = SysIntial.update(listStu);
							if(updated) {
								System.out.println("修改成功");
							}else {
								System.out.println("修改不成功");
							}
							break;

						case 4:
							SysIntial.remove(listStu);
							break;
						case 5:
							SysIntial.saveAll(listStu, file);
							System.out.println("保存成功");
							break;
						case 6:
							SysIntial.listsALL(file);
							System.out.println("加载成功");
							break;
						case 0:
							flag2 = false;
							break;

						}

						// 如果标志位为false，退出当前循环
						if (!flag2) {
							break;
						}
					}

				}

			} else if (choise1 == 2) {
				// 学生登录界面
				Student stuUser = new Student();
				stuUser = SysIntial.loginStu(listStu);

				if (stuUser != null) {
					//SysIntial.printStuList(listStu);
					//SysIntial.printFriendList(listFriend);
					// 信息初始化 
					//初始化其他同学信息
					userListOthers =stuUser.setListOthers(listStu, listFriend);
					//System.out.println("=========其他同学==========");
					//stuUser.printOther(userListOthers);
					//初始化好友信息
					userListFriend = stuUser.getFriendList(listStu, listFriend);
					//System.out.println("=========好友信息：==========");
					//stuUser.printmb(userListFriend);
					//初始化留言板信息
					messageBoard=stuUser.getMessageBoard(listm, listStu);
					
					//System.out.println("=========留言板：==========");
					//stuUser.printOther(messageBoard);
					
					//System.out.println(userListOthers);
					// 在学生菜单出循环输入
					while (true) {
						// 显示学生菜单
						showStuMenu();
						// 默认标志位为真，即不退出
						flag2 = true;
						// 选择功能选项
						choise2 = sc.nextInt();
						switch (choise2) {
						// 查询个人信息
						case 1:
							stuUser.printMessage();
							break;
						
						case 2:
							// 修改密码
							// 一直循环直至修改号密码退出
							while (true) {
								// 提示并输入两次新密码
								System.out.println("修改密码：");
								System.out.println("请输入新密码");
								String password1 = sc.next();
								System.out.println("继续输入新密码");
								String password2 = sc.next();
								// 如果两次密码一致，修改用户密码
								if (password1.equals(password2)) {
									stuUser.setUserPw(password1);
									System.out.println("密码修改成功");
									
								} else {
									System.out.println("两次密码输入不一致，重新输入");
									System.out.println("密码修改不成功");
								}
								break;
							}
							break;
						case 3:
							//查询其他同学的信息
							stuUser.printOther(userListOthers);
							break;

						case 4:
							//要添加的好友对象
							Student stufri = new Student();
							//判断是否添加成功
							boolean addSucceed = true;
							//获取要添加好友的id
							System.out.println("请输入要添加的id");
							String stuID = sc.next();
							System.out.println("请输入备注信息");
							String comment = sc.next();
							//判断输入的ID在学生列表中么
							Map<String, Object> condition = new HashMap<>();
							condition.put("UserID", stuID);
							List<Student> qlList = SysIntial.listCondition(listStu, condition);
							//如果找不到 输出问题
							//如果找到添加信息
							if(qlList == null ||qlList.size() == 0) {
								//System.out.println("没有输入的id对应的学生");
								addSucceed = false;
							}else {
								for (Student student : qlList) {
									stufri = student;
								}
								if(comment == null) {
									//添加好友
									addSucceed  =stuUser.addFriend(stuID, stufri.getUserName(), listFriend);
									
								}else {
									//添加好友
									addSucceed = stuUser.addFriend(stuID, comment, listFriend);
								}
							}
							//判断输入返回值
							if(addSucceed == true) {
								System.out.println("添加成功");
							}else {
								System.out.println("添加不成功");
							}
							
							//重新获取其他同学信息
							userListOthers =stuUser.setListOthers(listStu, listFriend);
							//重新获取好友信息列表
							userListFriend = stuUser.getFriendList(listStu, listFriend);
							//保存好友信息
							SysIntial.saveAll(listFriend, fileFriend);
							break;
						case 5:
							//查询好友信息
							//重新获取好友信息列表
							userListFriend = stuUser.getFriendList(listStu, listFriend);
							System.out.println("===========好友信息===========");
							stuUser.printOther(userListFriend);
							break;
						case 6:
							//保存好友信息
							SysIntial.saveAll(listFriend, fileFriend);
							System.out.println("保存成功");
							break;
						case 7:
							//删除好友
							//重新获取好友信息列表
							userListFriend = stuUser.getFriendList(listStu, listFriend);
							System.out.println("===========好友信息===========");
							//输出全部好友信息
							stuUser.printOther(userListFriend);
							//要删除的好友对象
							stufri = new Student();
							//判断是否添加成功
							boolean removeSucceed = true;
							//获取要添加好友的id
							System.out.println("请输入要添加的id");
							stuID = sc.next();
							
							//判断输入的ID在学生列表中么
							Map<String, Object> condition1 = new HashMap<>();
							condition1.put("UserID", stuID);
							qlList = SysIntial.listCondition(listStu, condition1);
							//如果找不到 输出
							//如果找到删除信息
							if(qlList == null ||qlList.size() == 0) {
								//System.out.println("没有输入的id对应的学生");
								addSucceed = false;
							}else {
								for (Student student : qlList) {
									stufri = student;
								}
								
									removeSucceed  = stuUser.removeFriend(stuID, listFriend);
									
							
							}
							//判断输入返回值
							if(removeSucceed == true) {
								System.out.println("删除成功");
							}else {
								System.out.println("删除不成功");
							}
							
							//重新获取其他同学信息
							userListOthers =stuUser.setListOthers(listStu, listFriend);
							//重新获取好友信息列表
							userListFriend = stuUser.getFriendList(listStu, listFriend);
							//保存好友信息
							SysIntial.saveAll(listFriend, fileFriend);
							break;
						case 8:
							
							//修改好友备注
							//重新获取好友信息列表
							userListFriend = stuUser.getFriendList(listStu, listFriend);
							System.out.println("===========好友信息===========");
							//输出全部好友信息
							stuUser.printOther(userListFriend);
							stufri = new Student();
							//标记是否修改成功
							boolean updateSucceed = true;
							//获取要添加好友的id
							System.out.println("请输入要添加的id");
							String stuID2 = sc.next();
							System.out.println("请输入备注信息");
							String comment2 = sc.next();
							//判断输入的ID在学生列表中么
							Map<String, Object> condition2 = new HashMap<>();
							condition2.put("UserID", stuID2);
							List<Student> qlList2 = SysIntial.listCondition(listStu, condition2);
							//如果找不到 输出问题
							//如果找到添加信息
							if(qlList2 == null ||qlList2.size() == 0) {
								//System.out.println("没有输入的id对应的学生");
								updateSucceed = false;
							}else {
								for (Student student : qlList2) {
									stufri = student;
								}
								if(comment2 == null) {
									updateSucceed = false;
									System.out.println("输入的备注为空");
									
								}else {
									updateSucceed = stuUser.updateComment(stuID2, comment2, listFriend);
								}
							}
							//判断输入返回值
							if(updateSucceed == true) {
								System.out.println("修改成功");
							}else {
								System.out.println("修改不成功");
							}
							
							//重新获取其他同学信息
							userListOthers =stuUser.setListOthers(listStu, listFriend);
							//重新获取好友信息列表
							userListFriend = stuUser.getFriendList(listStu, listFriend);
							//保存好友信息
							SysIntial.saveAll(listFriend, fileFriend);
							break;
						case 9:
							//查看我的留言板
							//获取留言板信息
							messageBoard = stuUser.getMessageBoard(listm, listStu);
							//输出留言板
							stuUser.printmb(messageBoard);
							break;
						case 10:
							//给好友留言
							//判断是否添加成功
							boolean sendSucceed =false;
							//获取要添加好友的id
							System.out.println("请输入要发送的同学的id");
							String stuID3 = sc.next();
							System.out.println("请输入邮件内容");
							String content = sc.next();
							//判断输入的ID在学生列表中么
							Map<String, Object> condition3 = new HashMap<>();
							condition3.put("UserID", stuID3);
							List<Student> qlList3 = SysIntial.listCondition(listStu, condition3);
							//如果找不到 输出问题
							//如果找到添加信息
							if(qlList3 == null ||qlList3.size() == 0) {
								//System.out.println("没有输入的id对应的学生");
								sendSucceed = false;
							}else {
								for (Student student : qlList3) {
									stufri = student;
								}
//								if(content == null) {
//									System.out.println("没有输入内容");
//									sendSucceed = false;
//									
//								}else {
//									//发送留言
								sendSucceed = stuUser.sendMessage(stuID3, content, listm);
//								}
							}
							//判断输入返回值
							if(sendSucceed == true) {
								System.out.println("发送成功");
							}else {
								System.out.println("发送不成功");
							}
							
							//重新获取邮件信息
							messageBoard=stuUser.getMessageBoard(listm, listStu);
							SysIntial.saveAll(listm, fileMessage);
							break;
						case 0:
							//保存当前登录所处理的所有信息到文件
							SysIntial.saveAll(listStu, file);
							SysIntial.saveAll(listFriend, fileFriend);
							SysIntial.saveAll(listm, fileMessage);
							System.out.println("保存数据到文件------保存成功");
							flag2 = false;
							break;

						}

						// 如果标志位为false，退出当前循环
						if (!flag2) {
							break;
						}

					}
				}

			} else if (choise1 == 0) {
				//保存当前登录所处理的所有信息到文件
				SysIntial.saveAll(listStu, file);
				SysIntial.saveAll(listFriend, fileFriend);
				SysIntial.saveAll(listm, fileMessage);
				//System.out.println("保存数据到文件------保存成功");
				flag1 = false;
				LogUtil.log("程序结束退出");
				if (flag1 == false) {
					break;
				}
			}
		}

	}

	public static void ShowIndexPage() {

		// 登录界面
		LogUtil.log("********************************");
		LogUtil.log("*\t1.教师登录");
		LogUtil.log("*\t2.学生登录");
		LogUtil.log("*\t0.退出");
		LogUtil.log("********************************");
		LogUtil.log("请选择功能菜单：1/2/0");
		LogUtil.logi("这是输出一些杂乱信息的logi");
		LogUtil.logd("这是debug用的信息");

	}

	public static void showTeacherMenu() {
		// 教师的功能界面
		LogUtil.log("********************************");
		LogUtil.log("*\t1.添加学生信息");
		LogUtil.log("*\t2.查询学生信息");
		LogUtil.log("*\t3.修改学生信息");
		LogUtil.log("*\t4.删除学生信息");
		LogUtil.log("*\t5.保存学生信息");
		LogUtil.log("*\t6.加载学生信息");
		LogUtil.log("*\t0.退出");
		LogUtil.log("********************************");
		LogUtil.log("请选择功能菜单：1/2/3/4/5/6/0");
	}

	public static void showStuMenu() {
		// 学生的功能界面
		LogUtil.log("********************************");
		LogUtil.log("*\t1.查询个人信息");
		LogUtil.log("*\t2.修改密码");
		LogUtil.log("*\t3.查询同学信息");
		LogUtil.log("*\t4.添加好友");
		LogUtil.log("*\t5.显示我的所有好友信息");
		LogUtil.log("*\t6.保存好友信息");
		LogUtil.log("*\t7.删除好友");
		LogUtil.log("*\t8.修改好友备注");
		LogUtil.log("*\t9.查看我的留言板");
		LogUtil.log("*\t10.给好友留言");
		LogUtil.log("*\t0.退出");
		LogUtil.log("********************************");
		LogUtil.log("请选择功能菜单：1/2/3/4/5/6/7/8/9/10/0");
	}
}
